package jp.co.dailyReport.staff.action;

import java.io.IOException;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import jp.co.dailyReport.DataUnavailableException;
import jp.co.dailyReport.staff.Staff;
import jp.co.dailyReport.staff.StaffManager;
import jp.co.dailyReport.PermissionException;

/**
 * 社員情報登録確認ページのボタン（戻る、登録）
 * が押されたときの処理を管理するクラスです。
 */
public class StaffAddCompletionAction extends Action {

	private static Logger log = Logger.getLogger(StaffAddCompletionAction.class);

	/**
	 * 社員情報登録確認ページで押されるボタン（戻る、登録）
	 * によって、実行する処理を制御します。<BR><BR>
	 * 「登録」ボタンが押された場合の処理：<BR>
	 * 社員情報をDBへ登録します。<BR>
	 * 
	 * @param mapping このインスタンスを選択するために使用したActionMapping
	 * @param form 存在するならば、このリクエストのためのActionForm Bean
	 * @param request 処理しているHTTPリクエスト
	 * @param response 処理しているHTTPレスポンス
	 * @return ActionForwardインスタンス
	 * @throws IOException, ServletException
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
	 throws IOException, ServletException{

		log.debug("StaffAddConfirmAction start");
		String target = null;

		if(request.getParameter("addCompletion") != null){
			target = "addCompletion";
			staffAddCompletion(form, request);
		} else if(request.getParameter("returnAdd") != null){
			target = "returnAdd";
		}

		log.debug("StaffAddConfirmAction end");
		return mapping.findForward(target);
	}

	private void staffAddCompletion(ActionForm form, HttpServletRequest request){

		HttpSession session = request.getSession();
		log.debug("session.getId() = " + session.getId());
		Staff staff = (Staff)session.getAttribute("LoginStaff");

		try{
			StaffActionForm staffActionForm = (StaffActionForm)form;
			Staff staffRegistration = new Staff();
			staffRegistration.setName(staffActionForm.getName());
			staffRegistration.setUsr(staffActionForm.getUsr());
			staffRegistration.setKeyCode(StaffManager.encryptedPassword(staffActionForm.getPasswd()));
			staffRegistration.setEmploymentSystem(staffActionForm.getEmploymentSystem());
			staffRegistration.setPosition(staffActionForm.getPosition());
			StaffManager.insert(staff,staffRegistration);
			java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy/MM/dd");
			Calendar cal = Calendar.getInstance();
			String result = df.format(cal.getTime());
			log.debug("update staff date: " + result + " staffId: " + staffActionForm.getStaffId() + " password: " + staffActionForm.getPasswd() + " keyCode: " + StaffManager.encryptedPassword(staffActionForm.getPasswd()));
		} catch(DataUnavailableException due) {
			log.error(due.getMessage());
		} catch(PermissionException pe) {
			log.error(pe.getMessage());
		}
	}
}
